package a2022.a20220518;

/**
 * @author lenovo
 * @date 2022/5/19
 */
public class MyQueen {

    /**
     * 设置极限值
     */
    public static final int  max = 8;
    /**
     * 设置一个数组存棋子,array内值为棋子所在行
     */
    private static int[] array = new int[max];
    /**
     * 计数
     */
    private static int num = 0;


    public static void main(String[] args) {
        course(0);
        System.out.println(num);
    }

    private static void course(int n) {
        //遍历该列所有不合法的行，并用rows数组记录，不合法即rows[i]=true 
        boolean[] rows = new boolean[max];
        for (int i = 0; i < n; i++) {
            rows[array[i]] = true;
            int d = n - i;
            if (array[i] - d >= 0) rows[array[i] - d] = true;
            if (array[i] + d <= max - 1) rows[array[i] + d] = true;

        }
        for (int i = 0; i < max; i++) {
            //判断该行是否合法   
            if (rows[i]) continue;
            //设置当前列合法棋子所在行数 
            array[n] = i;
            //当前列不为最后一列时 
            if (n < max - 1) {
                course(n + 1);
            } else {

                //累计方案个数 
                num++;

            }
        }
    }
}
